﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Net.Http.Headers;
namespace Lesson3_Queue
{
    class Text
    {

    }
    internal class Program
    {
        static void Main(string[] args)
        {

            #region   知识点一: Queue 本质  
            //它是c#为我们封装好的类
            //它的本质也是object[]数组，封装了特殊的存储规则

            //Queue是队列存储容器
            //它是一种先进先出（FIFO）的存储容器
            //它只能从一端添加数据，从另一端移除数据
            //先存入的数据先获取，后存入的数据后获取
            //先进先出（横线的管子）
            #endregion

            #region   知识点二: Queue 的申明
            //引用命名空间using System.Collections;
            Queue queue = new Queue();
            #endregion


            #region  知识点三增添查改

            #region  增
            queue.Enqueue(1);
            queue.Enqueue("123");
            queue.Enqueue(true);
            queue.Enqueue(new Text());
            Console.WriteLine(queue.Count);   //查看队列中元素个数   输出结果为4
            #endregion

            #region   取   
            //先进先出
            object v = queue.Dequeue();
            Console.WriteLine(v);
            //v = queue.Dequeue();
            //Console.WriteLine(v);
            #endregion

            #region 查

            //1:查看队列头部元素
            v = queue.Peek();
            Console.WriteLine(v);
            #endregion

            //2:查看元素是否在队列中

            if (queue.Contains("123"))    //存在返回true
            {
                Console.WriteLine("123在队列中");
            }

            #endregion

            #region 改
            //队列中同stack一样不能更改容器中的内容
            //实在要改，只能清、
            queue.Clear();
            Console.WriteLine("***************");
            queue.Enqueue(1);
            queue.Enqueue(2);
          
            Console.WriteLine(queue.Count);  //输出结果为4
            #endregion

            #region 知识点四:遍历

            //获取长度
            Console.WriteLine(queue.Count);  //输出结果为4

            //特殊的存储方法导致不能使用for 循环 

            foreach (object o in queue)
            {
                Console.Write(o + " ");
                 
            }
            Console.WriteLine("");
            Console.WriteLine("******************");

            object[] q = queue.ToArray();
            for(int i = 0; i < q.Length; i++)
            {
                Console.Write(q[i] + " ");
            }
                Console.WriteLine("");
         


            //边拿边用，循环出列
            Console.WriteLine("*************");
            while (queue.Count > 0)
            {
                object m = queue.Dequeue();  //取得操作
                Console.Write(m + " ");
            }
            Console.WriteLine("");
          
            #endregion

            #region 知识点五:封箱拆箱

            #endregion
        }
    }
}
